package com.monitor.module.redis;

import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;

import javax.annotation.Resource;
import java.util.List;

/**
 * .
 *
 * @author Li Zhiyuan
 * @since 2020-11-26
 */


//有两个 redis 模板：RedisTemplate 和 StringRedisTemplate。我们不使用 RedisTemplate，
//RedisTemplate 提供给我们操作对象，操作对象的时候，我们通常是以 json 格式存储，但在存储的时
//候，会使用 Redis 默认的内部序列化器；导致我们存进里面的是乱码之类的东西。当然了，我们可以自
//己定义序列化，但是比较麻烦，所以使用 StringRedisTemplate 模板。StringRedisTemplate 主要给我
//们提供字符串操作，我们可以将实体类等转成 json 字符串即可，在取出来后，也可以转成相应的对
//象，这就是上面我导入了阿里 fastjson 的原因。

//新建一个 RedisService，注入 StringRedisTemplate，使用  stringRedisTemplate.opsForValue()
//可以获取  ValueOperations<String, String> 对象，通过该对象即可读写 redis 数据库了。
public class RedisService {
    @Resource
    private StringRedisTemplate stringRedisTemplate;
    /**
     * set redis: string类型
     */
    public void setString(String key,String value){
        ValueOperations<String,String> valueOperations=stringRedisTemplate.opsForValue();
        valueOperations.set(key,value);
    }

    /**
     * get redis: string类型
     */
    public String getString(String key){
        return stringRedisTemplate.opsForValue().get(key);
    }

    /**
     * set redis: hash类型
     */
    public void setHash(String key,String filedkey,String value){
        HashOperations<String,Object,Object> hashOperations=stringRedisTemplate.opsForHash();
        hashOperations.put(key,filedkey,value);
    }

    /**
     * get redis: hash类型
     */
    public String getHash(String key,String filedkey){
        return (String) stringRedisTemplate.opsForHash().get(key,filedkey);
    }

    /**
     * set redis: list类型
     */
    public long setList(String key,String value){
        ListOperations<String,String> listOperations=stringRedisTemplate.opsForList();
        return listOperations.leftPush(key,value);
    }

    /**
     * get redis: list类型
     */
    public List<String> getList(String key,long start,long end){
        return stringRedisTemplate.opsForList().range(key,start,end);
    }
}
